/**
 * 图标服务
 * 用于从后端API获取图标数据
 */
import config from '../config/config.js';

// API基础URL
const BASE_URL = config.baseUrl || 'http://localhost:8080/api';

/**
 * 获取所有可用图标
 * @param {string} category 可选的图标分类
 * @returns {Promise<Array>} 图标列表
 */
function getAllIcons(category = '') {
  return new Promise((resolve, reject) => {
    let url = `${BASE_URL}/system/icon/all`;
    if (category) {
      url += `?category=${encodeURIComponent(category)}`;
    }
    
    wx.request({
      url,
      method: 'GET',
      success: (res) => {
        if (res.statusCode === 200 && res.data && res.data.code === 0) {
          resolve(res.data.data || []);
        } else {
          reject(new Error(res.data?.message || '获取图标失败'));
        }
      },
      fail: (err) => {
        console.error('获取图标列表失败:', err);
        reject(err);
      }
    });
  });
}

/**
 * 根据图标编码获取图标
 * @param {string} code 图标编码
 * @returns {Promise<Object>} 图标对象
 */
function getIconByCode(code) {
  return new Promise((resolve, reject) => {
    if (!code) {
      reject(new Error('图标编码不能为空'));
      return;
    }
    
    wx.request({
      url: `${BASE_URL}/system/icon/code/${encodeURIComponent(code)}`,
      method: 'GET',
      success: (res) => {
        if (res.statusCode === 200 && res.data && res.data.code === 0) {
          resolve(res.data.data);
        } else {
          reject(new Error(res.data?.message || '获取图标失败'));
        }
      },
      fail: (err) => {
        console.error(`获取图标 ${code} 失败:`, err);
        reject(err);
      }
    });
  });
}

/**
 * 获取图标内容（如果是base64或URL）
 * @param {string} code 图标编码
 * @returns {Promise<string>} 图标内容或URL
 */
function getIconContent(code) {
  return new Promise((resolve, reject) => {
    getIconByCode(code)
      .then(icon => {
        if (icon.content) {
          resolve(icon.content);
        } else if (icon.url) {
          resolve(icon.url);
        } else {
          reject(new Error('图标内容和URL均为空'));
        }
      })
      .catch(err => reject(err));
  });
}

/**
 * 获取一组图标，返回编码到内容的映射
 * @param {Array<string>} codes 图标编码数组
 * @returns {Promise<Object>} 图标映射对象
 */
function getIconsMap(codes) {
  return new Promise((resolve, reject) => {
    if (!codes || !Array.isArray(codes) || codes.length === 0) {
      resolve({});
      return;
    }
    
    const promises = codes.map(code => getIconByCode(code));
    
    Promise.allSettled(promises)
      .then(results => {
        const iconsMap = {};
        
        results.forEach((result, index) => {
          if (result.status === 'fulfilled' && result.value) {
            const code = codes[index];
            const icon = result.value;
            iconsMap[code] = icon.content || icon.url || '';
          }
        });
        
        resolve(iconsMap);
      })
      .catch(err => {
        console.error('获取图标映射失败:', err);
        reject(err);
      });
  });
}

// 定义接口对象
const iconService = {
  getAllIcons,
  getIconByCode,
  getIconContent,
  getIconsMap
};

// 兼容CommonJS
if (typeof module !== 'undefined' && module.exports) {
  module.exports = iconService;
}

// 兼容ES模块
export default iconService; 